package sharewithus.search.solr.client;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import java.util.Map;

import org.apache.solr.client.solrj.SolrQuery;

import sharewithus.search.solr.utils.OrderBy;
import sharewithus.search.solr.utils.Pagination;

public interface SolrClient<T> {

	/**
	 * 查询数据
	 * 
	 * @param queryString
	 *            查询语句
	 * @param pageNo
	 *            页码
	 * @param pageSize
	 *            页尺寸
	 * @param orderBy
	 *            排序对象
	 * @return 分页器
	 */
	public Pagination<T> query(String queryString, int pageNo, int pageSize,
			OrderBy orderBy);
	/**
	 * 
	 * 2012-5-25, 上午9:37:48 方法描述：按query查询
	 * 
	 * @param query
	 *            SolrQuery对象
	 * @param pageNo
	 *            页码
	 * @param pageSize
	 *            页尺寸
	 * @param orderBy
	 *            OrderBy对象
	 * @return 分页器
	 */
	public Pagination<T> query(SolrQuery query, int pageNo, int pageSize,
			OrderBy orderBy);

	/**
	 * 提交数据
	 * 
	 * @param bean
	 * @return
	 */
	public int commitBean(T bean);

	/**
	 * 批量提交
	 * 
	 * @param beans
	 *            bean集合
	 * @return 状态值
	 */
	public int commitBeans(Collection<T> beans);

	/**
	 * 
	 * 2012-5-24, 下午4:36:34 方法描述：更新数据
	 * 
	 * @param id
	 * @param valueMap
	 *            key为字段名称,value为要更新的值
	 * @return
	 */
	public int update(String id, Map<String, Object> valueMap);

	/**
	 * 
	 * 2012-5-25, 上午9:39:39 方法描述：批量更新
	 * 
	 * @param keyMap
	 *            key:主键,value:(字段<->value) map
	 * @return 状态值
	 */
	public int batchUpdate(Map<String, Map<String, Object>> keyMap);
	
	/**
	 * 
	 * 2012-5-25, 下午1:48:48
	 * 方法描述：按ID删除
	 * @param id
	 * @return
	 */
	public int deleteById(String id);
	
	/**
	 * 
	 * 2012-5-25, 下午1:48:48
	 * 方法描述：按ID删除
	 * @param id list
	 * @return
	 */
	public int deleteById(List<String> ids);
	
	/**
	 * 
	 * 2012-5-25, 下午1:49:23
	 * 方法描述：按条件语句删除
	 * @param queryString
	 * @return
	 */
	public int deleteByQuery(String queryString);
	
	/**
	 * 
	 * 2012-5-25, 下午1:50:34
	 * 方法描述：按query对象删除
	 * @param query
	 * @return
	 */
	public int deleteByQuery(SolrQuery query);
	
	/**
	 * 优化solr数据存储结构
	 * 
	 */
	public void optimize();
}
